{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四次实战：TensorFlow-Keras构建wide&deep回归模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0\n",
      "sys.version_info(major=3, minor=6, micro=10, releaselevel='final', serial=0)\n",
      "matplotlib 3.1.2\n",
      "numpy 1.18.1\n",
      "pandas 0.25.3\n",
      "sklearn 0.22.1\n",
      "tensorflow 2.0.0\n",
      "tensorflow_core.keras 2.2.4-tf\n"
     ]
    }
   ],
   "source": [
    "# 导入\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "\n",
    "print(tf.__version__)\n",
    "print(sys.version_info)\n",
    "for module in mpl,np,pd,sklearn,tf,keras:\n",
    "    print(module.__name__,module.__version__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实战开始"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据读取和展示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".. _california_housing_dataset:\n",
      "\n",
      "California Housing dataset\n",
      "--------------------------\n",
      "\n",
      "**Data Set Characteristics:**\n",
      "\n",
      "    :Number of Instances: 20640\n",
      "\n",
      "    :Number of Attributes: 8 numeric, predictive attributes and the target\n",
      "\n",
      "    :Attribute Information:\n",
      "        - MedInc        median income in block\n",
      "        - HouseAge      median house age in block\n",
      "        - AveRooms      average number of rooms\n",
      "        - AveBedrms     average number of bedrooms\n",
      "        - Population    block population\n",
      "        - AveOccup      average house occupancy\n",
      "        - Latitude      house block latitude\n",
      "        - Longitude     house block longitude\n",
      "\n",
      "    :Missing Attribute Values: None\n",
      "\n",
      "This dataset was obtained from the StatLib repository.\n",
      "http://lib.stat.cmu.edu/datasets/\n",
      "\n",
      "The target variable is the median house value for California districts.\n",
      "\n",
      "This dataset was derived from the 1990 U.S. census, using one row per census\n",
      "block group. A block group is the smallest geographical unit for which the U.S.\n",
      "Census Bureau publishes sample data (a block group typically has a population\n",
      "of 600 to 3,000 people).\n",
      "\n",
      "It can be downloaded/loaded using the\n",
      ":func:`sklearn.datasets.fetch_california_housing` function.\n",
      "\n",
      ".. topic:: References\n",
      "\n",
      "    - Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions,\n",
      "      Statistics and Probability Letters, 33 (1997) 291-297\n",
      "\n",
      "(20640, 8)\n",
      "(20640,)\n"
     ]
    }
   ],
   "source": [
    "# 导入数据集 房价预测\n",
    "from sklearn.datasets import fetch_california_housing\n",
    "\n",
    "housing = fetch_california_housing()\n",
    "print(housing.DESCR)\n",
    "print(housing.data.shape)\n",
    "print(housing.target.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(11610, 8) (11610,)\n",
      "(3870, 8) (3870,)\n",
      "(5160, 8) (5160,)\n"
     ]
    }
   ],
   "source": [
    "# 切分数据集\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "x_train_all,x_test,y_train_all,y_test = \n",
    "    train_test_split(housing.data,housing.target,random_state=7)\n",
    "x_train,x_valid,y_train,y_valid = \n",
    "    train_test_split(x_train_all,y_train_all,random_state=11)\n",
    "\n",
    "print(x_train.shape,y_train.shape)\n",
    "print(x_valid.shape,y_valid.shape)\n",
    "print(x_test.shape,y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对数据进行归一化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "scaler = StandardScaler()\n",
    "x_train_scaled = scaler.fit_transform(x_train)\n",
    "x_valid_scaled = scaler.transform(x_valid)\n",
    "x_test_scaled = scaler.transform(x_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型构建\n",
    "#### 函数API构建Wide&Deep模型\n",
    "使用函数式API/功能API构建Wide&Deep模型\n",
    "\n",
    "函数式API：复合函数 f(x) = h(g(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_1\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_2 (InputLayer)            [(None, 8)]          0                                            \n",
      "__________________________________________________________________________________________________\n",
      "dense_3 (Dense)                 (None, 30)           270         input_2[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "dense_4 (Dense)                 (None, 30)           930         dense_3[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_1 (Concatenate)     (None, 38)           0           input_2[0][0]                    \n",
      "                                                                 dense_4[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "dense_5 (Dense)                 (None, 1)            39          concatenate_1[0][0]              \n",
      "==================================================================================================\n",
      "Total params: 1,239\n",
      "Trainable params: 1,239\n",
      "Non-trainable params: 0\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 构建模型\n",
    "input = keras.layers.Input(shape=x_train.shape[1:])\n",
    "hidden1 = keras.layers.Dense(30, activation='relu')(input)\n",
    "hidden2 = keras.layers.Dense(30, activation='relu')(hidden1)\n",
    "concat = keras.layers.concatenate([input,hidden2])\n",
    "output = keras.layers.Dense(1)(concat)\n",
    "\n",
    "#固化模型\n",
    "model = keras.models.Model(inputs=[input],outputs=[output])\n",
    "model.summary()\n",
    "\n",
    "# 模型编译\n",
    "model.compile(loss='mean_squared_error',optimizer='adam')\n",
    "\n",
    "# 回调函数\n",
    "callbacks = [keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 150us/sample - loss: 1.6579 - val_loss: 0.7068\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.5516 - val_loss: 0.4951\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.4316 - val_loss: 0.4438\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.4032 - val_loss: 0.3999\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3753 - val_loss: 0.3808\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 120us/sample - loss: 0.3644 - val_loss: 0.3753\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 2s 130us/sample - loss: 0.3550 - val_loss: 0.3599\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 119us/sample - loss: 0.3447 - val_loss: 0.3550\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3672 - val_loss: 0.3548\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.3439 - val_loss: 0.3328\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.3178 - val_loss: 0.3396\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3156 - val_loss: 0.3246\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.3198 - val_loss: 0.3290\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.3128 - val_loss: 0.3143\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3059 - val_loss: 0.3192\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.3025 - val_loss: 0.3171\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.3099 - val_loss: 0.3200\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 1s 124us/sample - loss: 0.3040 - val_loss: 0.4211\n",
      "Epoch 19/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.3180 - val_loss: 0.3157\n"
     ]
    }
   ],
   "source": [
    "# 模型训练\n",
    "history = model.fit(x_train_scaled,y_train,epochs=100,\n",
    "                    validation_data=(x_valid_scaled,y_valid),\n",
    "                    callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画图展示变化，打印学习曲线\n",
    "def plot_learning_curves(history):\n",
    "    pd.DataFrame(history.history).plot(figsize=(8,5))\n",
    "    plt.grid(True)\n",
    "    plt.gca().set_ylim(0,1)\n",
    "    plt.show()\n",
    "    \n",
    "plot_learning_curves(history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 在测试集上进行指标评估\n",
    "model.evaluate(x_test_scaled,y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 子类API构建Wide&Deep模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"wide_deep_model\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_6 (Dense)              multiple                  270       \n",
      "_________________________________________________________________\n",
      "dense_7 (Dense)              multiple                  930       \n",
      "_________________________________________________________________\n",
      "dense_8 (Dense)              multiple                  39        \n",
      "=================================================================\n",
      "Total params: 1,239\n",
      "Trainable params: 1,239\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 子类API构建模型\n",
    "class WideDeepModel(keras.models.Model):\n",
    "    def __init__(self):\n",
    "        super(WideDeepModel,self).__init__()\n",
    "        \"\"\"定义模型的层次\"\"\"\n",
    "        self.hidden1_layer = keras.layers.Dense(30, activation='relu')\n",
    "        self.hidden2_layer = keras.layers.Dense(30, activation='relu')\n",
    "        self.output_layer = keras.layers.Dense(1)\n",
    "        \n",
    "    def call(self,input):\n",
    "        \"\"\"完成模型的正向计算\"\"\"\n",
    "        hidden1 = self.hidden1_layer(input)\n",
    "        hidden2 = self.hidden2_layer(hidden1)\n",
    "        concat = keras.layers.concatenate([input,hidden2])\n",
    "        output = self.output_layer(concat)\n",
    "        return output\n",
    "    \n",
    "# 使用子类，固化模型\n",
    "model = WideDeepModel()\n",
    "# 另外一种写法\n",
    "# model = keras.models.Sequential([WideDeepModel(),])\n",
    "model.build(input_shape=(None,8))\n",
    "model.summary()\n",
    "\n",
    "# 模型编译\n",
    "model.compile(loss='mean_squared_error',optimizer='adam')\n",
    "\n",
    "# 回调函数\n",
    "callbacks = [keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 186us/sample - loss: 1.0927 - val_loss: 0.5573\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 126us/sample - loss: 0.4606 - val_loss: 0.4489\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.4099 - val_loss: 0.4260\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3853 - val_loss: 0.3916\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 1s 118us/sample - loss: 0.4051 - val_loss: 0.3800\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 1s 119us/sample - loss: 0.3831 - val_loss: 0.3714\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3557 - val_loss: 0.3586\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.3464 - val_loss: 0.3619\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3387 - val_loss: 0.3705\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 1s 117us/sample - loss: 0.3377 - val_loss: 0.3410\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 1s 124us/sample - loss: 0.3284 - val_loss: 0.3411\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.3278 - val_loss: 0.3294\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 1s 119us/sample - loss: 0.3154 - val_loss: 0.3259\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 1s 119us/sample - loss: 0.3097 - val_loss: 0.3360\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.3144 - val_loss: 0.3238\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.3055 - val_loss: 0.3320\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.3137 - val_loss: 0.3104\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 1s 120us/sample - loss: 0.2981 - val_loss: 0.3245\n",
      "Epoch 19/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.2956 - val_loss: 0.3175\n",
      "Epoch 20/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.2978 - val_loss: 0.3153\n",
      "Epoch 21/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.2966 - val_loss: 0.3133\n",
      "Epoch 22/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.2899 - val_loss: 0.3092\n",
      "Epoch 23/100\n",
      "11610/11610 [==============================] - 1s 116us/sample - loss: 0.2921 - val_loss: 0.3243\n",
      "Epoch 24/100\n",
      "11610/11610 [==============================] - 1s 118us/sample - loss: 0.2961 - val_loss: 0.3091\n",
      "Epoch 25/100\n",
      "11610/11610 [==============================] - 1s 118us/sample - loss: 0.2918 - val_loss: 0.3091\n",
      "Epoch 26/100\n",
      "11610/11610 [==============================] - 1s 121us/sample - loss: 0.2882 - val_loss: 0.3127\n",
      "Epoch 27/100\n",
      "11610/11610 [==============================] - 1s 119us/sample - loss: 0.2814 - val_loss: 0.3048\n",
      "Epoch 28/100\n",
      "11610/11610 [==============================] - 1s 122us/sample - loss: 0.2807 - val_loss: 0.3028\n",
      "Epoch 29/100\n",
      "11610/11610 [==============================] - 1s 120us/sample - loss: 0.2833 - val_loss: 0.3023\n",
      "Epoch 30/100\n",
      "11610/11610 [==============================] - 1s 118us/sample - loss: 0.2805 - val_loss: 0.2964\n",
      "Epoch 31/100\n",
      "11610/11610 [==============================] - 1s 119us/sample - loss: 0.2784 - val_loss: 0.3014\n",
      "Epoch 32/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.2783 - val_loss: 0.3009\n",
      "Epoch 33/100\n",
      "11610/11610 [==============================] - 1s 128us/sample - loss: 0.2795 - val_loss: 0.2991\n",
      "Epoch 34/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.2823 - val_loss: 0.2949\n",
      "Epoch 35/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.2749 - val_loss: 0.3003\n",
      "Epoch 36/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.2784 - val_loss: 0.2998\n",
      "Epoch 37/100\n",
      "11610/11610 [==============================] - 1s 128us/sample - loss: 0.2735 - val_loss: 0.2964\n",
      "Epoch 38/100\n",
      "11610/11610 [==============================] - 2s 130us/sample - loss: 0.2738 - val_loss: 0.2930\n",
      "Epoch 39/100\n",
      "11610/11610 [==============================] - 2s 132us/sample - loss: 0.2779 - val_loss: 0.2920\n",
      "Epoch 40/100\n",
      "11610/11610 [==============================] - 2s 132us/sample - loss: 0.2731 - val_loss: 0.2921\n",
      "Epoch 41/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.2717 - val_loss: 0.2930\n",
      "Epoch 42/100\n",
      "11610/11610 [==============================] - 2s 131us/sample - loss: 0.2729 - val_loss: 0.2970\n",
      "Epoch 43/100\n",
      "11610/11610 [==============================] - 1s 128us/sample - loss: 0.2731 - val_loss: 0.2996\n"
     ]
    }
   ],
   "source": [
    "# 模型训练\n",
    "history_subclass = model.fit(x_train_scaled,y_train,epochs=100,\n",
    "                    validation_data=(x_valid_scaled,y_valid),\n",
    "                    callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curves(history_subclass)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 测试集上进行指标评估\n",
    "model.evaluate(x_test_scaled,y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 多输入构建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_2\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_4 (InputLayer)            [(None, 6)]          0                                            \n",
      "__________________________________________________________________________________________________\n",
      "dense_9 (Dense)                 (None, 30)           210         input_4[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "input_3 (InputLayer)            [(None, 5)]          0                                            \n",
      "__________________________________________________________________________________________________\n",
      "dense_10 (Dense)                (None, 30)           930         dense_9[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_2 (Concatenate)     (None, 35)           0           input_3[0][0]                    \n",
      "                                                                 dense_10[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "dense_11 (Dense)                (None, 1)            36          concatenate_2[0][0]              \n",
      "==================================================================================================\n",
      "Total params: 1,176\n",
      "Trainable params: 1,176\n",
      "Non-trainable params: 0\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 构建模型\n",
    "input_wide = keras.layers.Input(shape=[5])\n",
    "input_deep = keras.layers.Input(shape=[6])\n",
    "hidden1 = keras.layers.Dense(30, activation='relu')(input_deep)\n",
    "hidden2 = keras.layers.Dense(30, activation='relu')(hidden1)\n",
    "concat = keras.layers.concatenate([input_wide,hidden2])\n",
    "output = keras.layers.Dense(1)(concat)\n",
    "\n",
    "#固化模型\n",
    "model = keras.models.Model(inputs=[input_wide,input_deep],outputs=[output])\n",
    "model.summary()\n",
    "\n",
    "# 模型编译\n",
    "model.compile(loss='mean_squared_error',optimizer='adam')\n",
    "\n",
    "# 回调函数\n",
    "callbacks = [keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 2s 191us/sample - loss: 1.4356 - val_loss: 0.6161\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 1s 123us/sample - loss: 0.4876 - val_loss: 0.4660\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.4206 - val_loss: 0.4248\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 2s 133us/sample - loss: 0.3989 - val_loss: 0.4111\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 2s 134us/sample - loss: 0.3878 - val_loss: 0.3968\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 2s 135us/sample - loss: 0.3768 - val_loss: 0.3810\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 2s 138us/sample - loss: 0.3634 - val_loss: 0.3790\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 2s 138us/sample - loss: 0.3649 - val_loss: 0.3871\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 2s 140us/sample - loss: 0.3622 - val_loss: 0.4068\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 2s 140us/sample - loss: 0.3496 - val_loss: 0.3607\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 2s 140us/sample - loss: 0.3466 - val_loss: 0.3556\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 2s 142us/sample - loss: 0.3412 - val_loss: 0.3522\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 2s 134us/sample - loss: 0.3425 - val_loss: 0.3557\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 2s 131us/sample - loss: 0.3403 - val_loss: 0.3474\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 2s 136us/sample - loss: 0.3350 - val_loss: 0.3447\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 2s 133us/sample - loss: 0.3301 - val_loss: 0.3508\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 2s 131us/sample - loss: 0.3329 - val_loss: 0.3383\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 2s 139us/sample - loss: 0.3363 - val_loss: 0.3449\n",
      "Epoch 19/100\n",
      "11610/11610 [==============================] - 2s 134us/sample - loss: 0.3266 - val_loss: 0.3388\n",
      "Epoch 20/100\n",
      "11610/11610 [==============================] - 2s 132us/sample - loss: 0.3233 - val_loss: 0.3390\n",
      "Epoch 21/100\n",
      "11610/11610 [==============================] - 2s 131us/sample - loss: 0.3222 - val_loss: 0.3355\n",
      "Epoch 22/100\n",
      "11610/11610 [==============================] - 2s 129us/sample - loss: 0.3224 - val_loss: 0.3993\n",
      "Epoch 23/100\n",
      "11610/11610 [==============================] - 1s 128us/sample - loss: 0.3221 - val_loss: 0.3437\n",
      "Epoch 24/100\n",
      "11610/11610 [==============================] - 1s 128us/sample - loss: 0.3179 - val_loss: 0.3380\n",
      "Epoch 25/100\n",
      "11610/11610 [==============================] - 2s 132us/sample - loss: 0.3237 - val_loss: 0.3306\n",
      "Epoch 26/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.3152 - val_loss: 0.3335\n",
      "Epoch 27/100\n",
      "11610/11610 [==============================] - 1s 125us/sample - loss: 0.3149 - val_loss: 0.3294\n",
      "Epoch 28/100\n",
      "11610/11610 [==============================] - 1s 124us/sample - loss: 0.3123 - val_loss: 0.3300\n",
      "Epoch 29/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.3127 - val_loss: 0.3308\n",
      "Epoch 30/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.3180 - val_loss: 0.3356\n",
      "Epoch 31/100\n",
      "11610/11610 [==============================] - 1s 129us/sample - loss: 0.3102 - val_loss: 0.3235\n",
      "Epoch 32/100\n",
      "11610/11610 [==============================] - 1s 128us/sample - loss: 0.3101 - val_loss: 0.3267\n",
      "Epoch 33/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.3086 - val_loss: 0.3254\n",
      "Epoch 34/100\n",
      "11610/11610 [==============================] - 1s 125us/sample - loss: 0.3093 - val_loss: 0.3244\n",
      "Epoch 35/100\n",
      "11610/11610 [==============================] - 1s 127us/sample - loss: 0.3072 - val_loss: 0.3263\n",
      "Epoch 36/100\n",
      "11610/11610 [==============================] - 1s 126us/sample - loss: 0.3078 - val_loss: 0.3252\n"
     ]
    }
   ],
   "source": [
    "x_train_scaled_wide = x_train_scaled[:,:5]\n",
    "x_train_scaled_deep = x_train_scaled[:,2:]\n",
    "x_valid_scaled_wide = x_valid_scaled[:,:5]\n",
    "x_valid_scaled_deep = x_valid_scaled[:,2:]\n",
    "x_test_scaled_wide = x_test_scaled[:,:5]\n",
    "x_test_scaled_deep = x_test_scaled[:,2:]\n",
    "\n",
    "# 模型训练\n",
    "history_mutil_input = model.fit([x_train_scaled_wide,x_train_scaled_deep],\n",
    "                                y_train,\n",
    "                                validation_data=([x_valid_scaled_wide,x_valid_scaled_deep],\n",
    "                                                 y_valid),\n",
    "                                epochs=100,\n",
    "                                callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAEzCAYAAAD+XEDdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deZxU1YH28d+pvbuqN2gamgYEBBsRUAxuMWK74ho1ZiaoMcYkOo4x2yS+xmQmMe+8M1nMvJnJ+xqNMcY4k8QQY0aNjFkmtoJLRH1BQGUJizZ7A73Ra1Wd949ze6UbuqGhLn2f7+dzc2/dulV1jtXhqXvuuecYay0iIiLiT6FcF0BEREQGpqAWERHxMQW1iIiIjymoRUREfExBLSIi4mMKahERER87aFAbYx42xuw0xqwa4HljjPm+MWa9MeZNY8ypw19MERGRYBrMGfUjwCUHeP5SYLq33Arcf/jFEhERERhEUFtrXwD2HOCQq4BHrfMKUGyMKR+uAoqIiATZcFyjrgDe6/G4xtsnIiIihykyDO9h+tnX77ikxphbcc3jJBKJ902aNKnX8zubLR1ZS0Vq5Pdxy2azhEIjv54DUf2DW/8g1x1U/6DXf+3atbXW2jFDec1wBHUNMLHH4wnA1v4OtNY+CDwIUFlZadesWdPr+S/9agUvrq/l5bsvGIZi+Vt1dTVVVVW5LkbOqP7BrX+Q6w6qf9Drb4zZPNTXDMfPmqeAj3m9v88E6q212w7ljVLxCE1t6WEokoiIyMhw0DNqY8wvgCqg1BhTA3wdiAJYax8AFgOXAeuBZuDmQy1MMh6muT2DtRZj+mtRFxERCZaDBrW19rqDPG+BTw9HYfJjETJZS1s6SyIaHo63FBEROaYNxzXqYZOKu+I0taUV1CIiPtPR0UFNTQ2tra2H/B5FRUW8/fbbw1gqf0okEkyYMIFoNHrY7+WroE56Qd3cloFUjgsjIiK91NTUUFBQwOTJkw/58mRjYyMFBQXDXDJ/sdaye/duampqmDJlymG/n6/6yCdj7ixaHcpERPyntbWV0aNHqw/RQRhjGD169GG1PPTkr6D2zqj3tSuoRUT8SCE9OMP538mfQa0zahER6UcqFbzroj4Latf0va8tk+OSiIiI+IO/gjqmM2oRETk4ay133nkns2bNYvbs2fzyl78EYNu2bcyfP59TTjmFWbNmsWTJEjKZDB//+Me7jv3e976X49IPja96fad0jVpERAbhiSeeYPny5axYsYLa2lpOO+005s+fz89//nMWLFjAV7/6VTKZDM3NzSxfvpwtW7awatUqAOrq6nJc+qHxVVDndzV9K6hFRPzsG0+v5q2tDUN+XSaTIRzuf5yMmeML+fqVJw3qfZYuXcp1111HOBxm7NixnHvuuSxbtozTTjuNT3ziE3R0dHD11VdzyimnMHXqVDZs2MBnPvMZLr/8ci6++OIhlzuXfNX0HY+EiYYNTbpGLSIiB+AGxdzf/PnzeeGFF6ioqODGG2/k0UcfpaSkhBUrVlBVVcV9993Hpz71qaNc2sPjqzNqcD2/m9X0LSLia4M98+1ruAY8mT9/Pj/84Q+56aab2LNnDy+88AL33nsvmzdvpqKigltuuYV9+/bxxhtvcNlllxGLxbj22ms5/vjj+fjHP37Yn380+S+oY5pBS0REDuyaa67h5Zdf5uSTT8YYw3e+8x3GjRvHT3/6U+69916i0SipVIpHH32ULVu2cPPNN5PNZgH45je/mePSD43/gjoe1jVqERHpV1NTE+AGFLn33nu59957ez1/0003cdNNN+33ujfeeOOolO9I8NU1auhs+tY1ahEREfBjUKvpW0REpIv/glpN3yIiIl18GNQRDSEqIiLi8V9QxyIamUxERMTjv6COR9T0LSIi4vFdUKfiYToylvZ0NtdFERERyTnfBXW+ZtASEZFhcqD5qzdt2sSsWbOOYmkOje+CunMGLd2iJSIi4sOgTnpBrUFPRESkr7vuuosf/OAHXY/vuecevvGNb3DBBRdw6qmnMnv2bJ588skhv29rays333wzs2fPZu7cuTz33HMArF69mtNPP51TTjmFOXPmsG7dOvbt28fll1/OySefzKxZs7rmwj5SfDeEaOdUlzqjFhHxsf/6MmxfOeSX5WXSEB4gesbNhku/dcDXL1y4kM9//vPcfvvtACxatIhnn32WL3zhCxQWFlJbW8uZZ57JBz/4QYwxgy7XfffdB8DKlSt55513uPjii1m7di0PPPAAn/vc57jhhhtob28nk8mwePFixo8fzzPPPANAfX39oD/nUPjujLqz6VvXqEVEpK+5c+eyc+dOtm7dyooVKygpKaG8vJyvfOUrzJkzhwsvvJAtW7awY8eO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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curves(history_mutil_input)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 测试集上进行指标评估\n",
    "model.evaluate([x_test_scaled_wide,x_test_scaled_deep],y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 多输出实战"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model_3\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_6 (InputLayer)            [(None, 6)]          0                                            \n",
      "__________________________________________________________________________________________________\n",
      "dense_12 (Dense)                (None, 30)           210         input_6[0][0]                    \n",
      "__________________________________________________________________________________________________\n",
      "input_5 (InputLayer)            [(None, 5)]          0                                            \n",
      "__________________________________________________________________________________________________\n",
      "dense_13 (Dense)                (None, 30)           930         dense_12[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "concatenate_3 (Concatenate)     (None, 35)           0           input_5[0][0]                    \n",
      "                                                                 dense_13[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "dense_14 (Dense)                (None, 1)            36          concatenate_3[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "dense_15 (Dense)                (None, 1)            31          dense_13[0][0]                   \n",
      "==================================================================================================\n",
      "Total params: 1,207\n",
      "Trainable params: 1,207\n",
      "Non-trainable params: 0\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 构建模型\n",
    "input_wide = keras.layers.Input(shape=[5])\n",
    "input_deep = keras.layers.Input(shape=[6])\n",
    "hidden1 = keras.layers.Dense(30, activation='relu')(input_deep)\n",
    "hidden2 = keras.layers.Dense(30, activation='relu')(hidden1)\n",
    "concat = keras.layers.concatenate([input_wide,hidden2])\n",
    "output = keras.layers.Dense(1)(concat)\n",
    "output2 = keras.layers.Dense(1)(hidden2)\n",
    "\n",
    "#固化模型\n",
    "model = keras.models.Model(inputs=[input_wide,input_deep],\n",
    "                           outputs=[output,output2])\n",
    "model.summary()\n",
    "\n",
    "# 模型编译\n",
    "model.compile(loss='mean_squared_error',optimizer='adam')\n",
    "\n",
    "# 回调函数\n",
    "callbacks = [keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 11610 samples, validate on 3870 samples\n",
      "Epoch 1/100\n",
      "11610/11610 [==============================] - 3s 258us/sample - loss: 3.4015 - dense_14_loss: 1.4283 - dense_15_loss: 1.9722 - val_loss: 1.5721 - val_dense_14_loss: 0.6343 - val_dense_15_loss: 0.9377\n",
      "Epoch 2/100\n",
      "11610/11610 [==============================] - 2s 183us/sample - loss: 1.1932 - dense_14_loss: 0.5007 - dense_15_loss: 0.6923 - val_loss: 1.1078 - val_dense_14_loss: 0.4694 - val_dense_15_loss: 0.6382\n",
      "Epoch 3/100\n",
      "11610/11610 [==============================] - 2s 185us/sample - loss: 1.0124 - dense_14_loss: 0.4289 - dense_15_loss: 0.5835 - val_loss: 1.0060 - val_dense_14_loss: 0.4315 - val_dense_15_loss: 0.5744\n",
      "Epoch 4/100\n",
      "11610/11610 [==============================] - 2s 186us/sample - loss: 0.9577 - dense_14_loss: 0.4111 - dense_15_loss: 0.5465 - val_loss: 0.9635 - val_dense_14_loss: 0.4107 - val_dense_15_loss: 0.5526\n",
      "Epoch 5/100\n",
      "11610/11610 [==============================] - 2s 189us/sample - loss: 0.9079 - dense_14_loss: 0.3928 - dense_15_loss: 0.5150 - val_loss: 0.9094 - val_dense_14_loss: 0.3973 - val_dense_15_loss: 0.5119\n",
      "Epoch 6/100\n",
      "11610/11610 [==============================] - 2s 183us/sample - loss: 0.8712 - dense_14_loss: 0.3858 - dense_15_loss: 0.4851 - val_loss: 0.8829 - val_dense_14_loss: 0.3918 - val_dense_15_loss: 0.4910\n",
      "Epoch 7/100\n",
      "11610/11610 [==============================] - 2s 177us/sample - loss: 0.8301 - dense_14_loss: 0.3690 - dense_15_loss: 0.4612 - val_loss: 0.8512 - val_dense_14_loss: 0.3804 - val_dense_15_loss: 0.4707\n",
      "Epoch 8/100\n",
      "11610/11610 [==============================] - 2s 172us/sample - loss: 0.8116 - dense_14_loss: 0.3596 - dense_15_loss: 0.4517 - val_loss: 0.8381 - val_dense_14_loss: 0.3711 - val_dense_15_loss: 0.4669\n",
      "Epoch 9/100\n",
      "11610/11610 [==============================] - 2s 167us/sample - loss: 0.8177 - dense_14_loss: 0.3534 - dense_15_loss: 0.4643 - val_loss: 0.8173 - val_dense_14_loss: 0.3660 - val_dense_15_loss: 0.4511\n",
      "Epoch 10/100\n",
      "11610/11610 [==============================] - 2s 170us/sample - loss: 0.8268 - dense_14_loss: 0.3565 - dense_15_loss: 0.4703 - val_loss: 0.8081 - val_dense_14_loss: 0.3621 - val_dense_15_loss: 0.4459\n",
      "Epoch 11/100\n",
      "11610/11610 [==============================] - 2s 168us/sample - loss: 0.7919 - dense_14_loss: 0.3564 - dense_15_loss: 0.4354 - val_loss: 0.7876 - val_dense_14_loss: 0.3557 - val_dense_15_loss: 0.4317\n",
      "Epoch 12/100\n",
      "11610/11610 [==============================] - 2s 177us/sample - loss: 0.7536 - dense_14_loss: 0.3423 - dense_15_loss: 0.4113 - val_loss: 0.8406 - val_dense_14_loss: 0.3645 - val_dense_15_loss: 0.4759\n",
      "Epoch 13/100\n",
      "11610/11610 [==============================] - 2s 186us/sample - loss: 0.7480 - dense_14_loss: 0.3418 - dense_15_loss: 0.4060 - val_loss: 0.7664 - val_dense_14_loss: 0.3487 - val_dense_15_loss: 0.4176\n",
      "Epoch 14/100\n",
      "11610/11610 [==============================] - 2s 186us/sample - loss: 0.7585 - dense_14_loss: 0.3501 - dense_15_loss: 0.4084 - val_loss: 0.8004 - val_dense_14_loss: 0.3640 - val_dense_15_loss: 0.4363\n",
      "Epoch 15/100\n",
      "11610/11610 [==============================] - 2s 185us/sample - loss: 0.7902 - dense_14_loss: 0.3463 - dense_15_loss: 0.4438 - val_loss: 0.7806 - val_dense_14_loss: 0.3589 - val_dense_15_loss: 0.4215\n",
      "Epoch 16/100\n",
      "11610/11610 [==============================] - 2s 173us/sample - loss: 0.7384 - dense_14_loss: 0.3354 - dense_15_loss: 0.4029 - val_loss: 0.7560 - val_dense_14_loss: 0.3447 - val_dense_15_loss: 0.4111\n",
      "Epoch 17/100\n",
      "11610/11610 [==============================] - 2s 170us/sample - loss: 0.7403 - dense_14_loss: 0.3380 - dense_15_loss: 0.4023 - val_loss: 0.7448 - val_dense_14_loss: 0.3392 - val_dense_15_loss: 0.4055\n",
      "Epoch 18/100\n",
      "11610/11610 [==============================] - 2s 171us/sample - loss: 0.7303 - dense_14_loss: 0.3343 - dense_15_loss: 0.3963 - val_loss: 0.9683 - val_dense_14_loss: 0.4133 - val_dense_15_loss: 0.5547\n",
      "Epoch 19/100\n",
      "11610/11610 [==============================] - 2s 172us/sample - loss: 0.7575 - dense_14_loss: 0.3398 - dense_15_loss: 0.4179 - val_loss: 0.7481 - val_dense_14_loss: 0.3402 - val_dense_15_loss: 0.4078\n",
      "Epoch 20/100\n",
      "11610/11610 [==============================] - 2s 177us/sample - loss: 0.7446 - dense_14_loss: 0.3331 - dense_15_loss: 0.4114 - val_loss: 0.7986 - val_dense_14_loss: 0.3514 - val_dense_15_loss: 0.4471\n",
      "Epoch 21/100\n",
      "11610/11610 [==============================] - 2s 175us/sample - loss: 0.7464 - dense_14_loss: 0.3362 - dense_15_loss: 0.4102 - val_loss: 0.7875 - val_dense_14_loss: 0.3806 - val_dense_15_loss: 0.4068\n",
      "Epoch 22/100\n",
      "11610/11610 [==============================] - 2s 178us/sample - loss: 0.7145 - dense_14_loss: 0.3293 - dense_15_loss: 0.3849 - val_loss: 0.7477 - val_dense_14_loss: 0.3428 - val_dense_15_loss: 0.4048\n"
     ]
    }
   ],
   "source": [
    "# 模型训练\n",
    "history_mutil_output = model.fit([x_train_scaled_wide,x_train_scaled_deep],\n",
    "                                 [y_train,y_train],\n",
    "                                validation_data=([x_valid_scaled_wide,x_valid_scaled_deep],\n",
    "                                                 [y_valid,y_valid]),\n",
    "                                epochs=100,\n",
    "                                callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_learning_curves(history_mutil_output)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# 测试集上进行指标评估\n",
    "model.evaluate([x_test_scaled_wide,x_test_scaled_deep],[y_test,y_test])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
